C.S.Burner 🪙 ━►🔥GIT Node
tests/backend/test_security_adversarial_pass.py dev (9051d6cc) Text, 13.28 KB
T8b949e# SPDX-License-Identifier: 0BSD
T8b949e"""Adversarial oracles for XSS, auth bypass, RCE env injection, and privacy leaks.
Each test predicts accept or reject from the input (or from a fixed allowlist)
and checks the implementation matches. Soft fuzz that only asserts no crash is
not used here.
"""
Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations
Tff7b72import T7ee787json
Tff7b72import T7ee787os
Tff7b72import T7ee787secrets
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3AsyncMockTb4b4b4, Te6edf3MagicMockTb4b4b4, Te6edf3patch
Tff7b72import T7ee787bcrypt
Tff7b72import T7ee787pytest
Tff7b72from T7ee787aiohttp Tff7b72import Te6edf3web
Tff7b72from T7ee787aiohttpT7ee787.T7ee787test_utils Tff7b72import Te6edf3TestClientTb4b4b4, Te6edf3TestServer
Tff7b72from T7ee787aiohttp_session Tff7b72import Te6edf3setup Tff7b72as Te6edf3setup_session
Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3HealthCheckTb4b4b4, Te6edf3givenTb4b4b4, Te6edf3settings
Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3strategies Tff7b72as Te6edf3st
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787httpT7ee787.T7ee787middleware Tff7b72import Tb4b4b4(
Te6edf3create_auth_middlewareTb4b4b4,
Te6edf3csrf_exempt_pathTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787httpT7ee787.T7ee787wsT7ee787.T7ee787dispatch Tff7b72import Te6edf3WS_HANDLERS
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787log_redaction Tff7b72import Te6edf3REDACTEDTb4b4b4, Te6edf3redact_diagnostic_text
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787lxmf_utils Tff7b72import Te6edf3parse_stored_lxmf_fields
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787map_geo_sanitizer Tff7b72import Te6edf3sanitize_geo_bytes
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787markdown_renderer Tff7b72import Te6edf3MarkdownRendererTb4b4b4, Te6edf3_safe_href
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787page_node Tff7b72import Te6edf3_build_executable_page_env
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787plugin_guard Tff7b72import Te6edf3PluginSecurityErrorTb4b4b4, Te6edf3normalize_asset_path
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787sticker_utils Tff7b72import Te6edf3detect_image_format_from_magic
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787websocket_config_guard Tff7b72import Tb4b4b4(
Te6edf3WEBSOCKET_MUTATOR_TYPESTb4b4b4,
Te6edf3WEBSOCKET_PUBLIC_TYPESTb4b4b4,
Te6edf3WEBSOCKET_READ_TYPESTb4b4b4,
Te6edf3websocket_type_requires_authTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787testsT7ee787.T7ee787backendT7ee787.T7ee787conftest Tff7b72import Te6edf3extend_meshchat_middlewaresTb4b4b4, Te6edf3fetch_api_csrf_headers
Te6edf3_XSS_HREF_PAYLOADS Tff7b72= Tb4b4b4(
Ta5d6ff"Ta5d6ffjavascript:alert(1)Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffJAVASCRIPT:alert(1)Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff javascript:alert(1)Ta5d6ff"Tb4b4b4,
Ta5d6ff"Tffea00\tTa5d6ffjavascript:alert(1)Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffvbscript:msgbox(1)Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffdata:text/html,<script>alert(1)</script>Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffdata:image/svg+xml,<svg onload=alert(1)>Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff//evil.example/xTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fffile:///etc/passwdTa5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3_PROTECTED_WHEN_AUTH Tff7b72= Tb4b4b4(
Ta5d6ff"Ta5d6ffGET /api/v1/configTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffGET /api/v1/map/data/statusTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffGET /api/v1/map/data/publishedTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffGET /api/v1/identitiesTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffGET /api/v1/lxmf-messages/attachment/aa/imageTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffPOST /api/v1/map/data/publishTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffPOST /api/v1/map/data/announceTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffPATCH /api/v1/map/data/configTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffDELETE /api/v1/map/data/published/aaaaaaaaaaaaaaaaTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ff_make_aio_appTb4b4b4(Te6edf3mock_appTb4b4b4, Te6edf3use_httpsTb4b4b4: Tffa657bool Tff7b72= Tff7b72FalseTb4b4b4)Tb4b4b4:
Te6edf3mock_appTff7b72.Td2a8ffsession_secret_key Tff7b72= Te6edf3secretsTff7b72.Td2a8fftoken_urlsafeTb4b4b4(T79c0ff32Tb4b4b4)
Te6edf3mock_appTff7b72.Td2a8fflisten_host Tff7b72= Ta5d6ff"Ta5d6ff127.0.0.1Ta5d6ff"
Te6edf3mock_appTff7b72.Td2a8fflisten_port Tff7b72= T79c0ff8000
Te6edf3mock_appTff7b72.Td2a8ffuse_https Tff7b72= Te6edf3use_https
Te6edf3mock_appTff7b72.Td2a8fflandlock_active Tff7b72= Tff7b72False
Te6edf3routes Tff7b72= Te6edf3webTff7b72.Td2a8ffRouteTableDefTb4b4b4(Tb4b4b4)
Te6edf3middlewares Tff7b72= Te6edf3mock_appTff7b72.Td2a8ff_define_routesTb4b4b4(Te6edf3routesTb4b4b4)
Te6edf3aio_app Tff7b72= Te6edf3webTff7b72.Td2a8ffApplicationTb4b4b4(Tb4b4b4)
Te6edf3setup_sessionTb4b4b4(Te6edf3aio_appTb4b4b4, Te6edf3mock_appTff7b72.Td2a8ff_encrypted_cookie_storageTb4b4b4(Te6edf3use_httpsTb4b4b4)Tb4b4b4)
Te6edf3extend_meshchat_middlewaresTb4b4b4(Te6edf3aio_appTb4b4b4, Te6edf3middlewaresTb4b4b4)
Te6edf3aio_appTff7b72.Td2a8ffadd_routesTb4b4b4(Te6edf3routesTb4b4b4)
Tff7b72return Te6edf3aio_app
Tff7b72def Td2a8ff_enable_password_authTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3mock_appTff7b72.Td2a8ffconfigTff7b72.Td2a8ffauth_enabledTff7b72.Td2a8ffsetTb4b4b4(Tff7b72TrueTb4b4b4)
Te6edf3mock_appTff7b72.Td2a8ffconfigTff7b72.Td2a8ffauth_password_hashTff7b72.Td2a8ffsetTb4b4b4(
Te6edf3bcryptTff7b72.Td2a8ffhashpwTb4b4b4(Ta5d6ffbTa5d6ff"Ta5d6ffadversarial-pass-okTa5d6ff"Tb4b4b4, Te6edf3bcryptTff7b72.Td2a8ffgensaltTb4b4b4(Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ff_href_is_executableTb4b4b4(Te6edf3urlTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3u Tff7b72= Tb4b4b4(Te6edf3url Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3uTff7b72.Td2a8ffstartswithTb4b4b4(Tb4b4b4(Ta5d6ff"Ta5d6ffjavascript:Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffvbscript:Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdata:Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fffile:Ta5d6ff"Tb4b4b4)Tb4b4b4) Tff7b72or Te6edf3uTff7b72.Td2a8ffstartswithTb4b4b4(
Ta5d6ff"Ta5d6ff//Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_oracle_safe_href_rejects_executable_schemesTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3payload Tff7b72in Te6edf3_XSS_HREF_PAYLOADSTb4b4b4:
Te6edf3out Tff7b72= Te6edf3_safe_hrefTb4b4b4(Te6edf3payloadTb4b4b4)
Tff7b72assert Te6edf3out Tff7b72== Ta5d6ff"Ta5d6ff#Ta5d6ff"Tb4b4b4, Te6edf3payload
Tff7b72assert Tff7b72not Te6edf3_href_is_executableTb4b4b4(Te6edf3outTb4b4b4)
Tff7b72def Td2a8fftest_oracle_markdown_render_never_emits_executable_hrefTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3payload Tff7b72in Te6edf3_XSS_HREF_PAYLOADSTb4b4b4:
Te6edf3html Tff7b72= Te6edf3MarkdownRendererTff7b72.Td2a8ffrenderTb4b4b4(Ta5d6fffTa5d6ff"Ta5d6ff[x](Tffd700{Te6edf3payloadTffd700}Ta5d6ff)Ta5d6ff"Tb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ff<scriptTa5d6ff" Tff7b72not Tff7b72in Te6edf3htmlTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffjavascript:Ta5d6ff" Tff7b72not Tff7b72in Te6edf3htmlTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffvbscript:Ta5d6ff" Tff7b72not Tff7b72in Te6edf3htmlTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72assert Ta5d6ff'Ta5d6ffhref=Ta5d6ff"Ta5d6ffdata:Ta5d6ff' Tff7b72not Tff7b72in Te6edf3htmlTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftest_oracle_markdown_img_src_rejects_svg_and_html_dataTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3html Tff7b72= Te6edf3MarkdownRendererTff7b72.Td2a8ffrenderTb4b4b4(Ta5d6ff"Ta5d6ff>)Ta5d6ff"Tb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffdata:image/svgTa5d6ff" Tff7b72not Tff7b72in Te6edf3htmlTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Te6edf3html Tff7b72= Te6edf3MarkdownRendererTff7b72.Td2a8ffrenderTb4b4b4(Ta5d6ff"Ta5d6ff)Ta5d6ff"Tb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffjavascript:Ta5d6ff" Tff7b72not Tff7b72in Te6edf3htmlTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftest_oracle_kml_description_child_html_is_flattenedTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3kml Tff7b72= Ta5d6ffbTa5d6ff"""Ta5d6ff<?xml version=Ta5d6ff"Ta5d6ff1.0Ta5d6ff"Ta5d6ff?>
Ta5d6ff <kml xmlns=Ta5d6ff"Ta5d6ffhttp://www.opengis.net/kml/2.2Ta5d6ff"Ta5d6ff><Document>
Ta5d6ff <Placemark><name>P</name>
Ta5d6ff <description><script>alert(1)</script><a href=Ta5d6ff"Ta5d6ffjavascript:alert(1)Ta5d6ff"Ta5d6ff>x</a></description>
Ta5d6ff <Point><coordinates>1,2,0</coordinates></Point>
Ta5d6ff </Placemark>
Ta5d6ff </Document></kml>Ta5d6ff"""
Te6edf3result Tff7b72= Te6edf3sanitize_geo_bytesTb4b4b4(Te6edf3kmlTb4b4b4)
Tff7b72assert Te6edf3resultTff7b72.Td2a8fffeature_count Tff7b72== T79c0ff1
Te6edf3lower Tff7b72= Te6edf3resultTff7b72.Td2a8ffdataTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72assert Ta5d6ffbTa5d6ff"Ta5d6ff<scriptTa5d6ff" Tff7b72not Tff7b72in Te6edf3lower
Tff7b72assert Ta5d6ffbTa5d6ff"Ta5d6ff<a Ta5d6ff" Tff7b72not Tff7b72in Te6edf3lower
Tff7b72assert Ta5d6ffbTa5d6ff"Ta5d6ff<a hrefTa5d6ff" Tff7b72not Tff7b72in Te6edf3lower
Tff7b72assert Ta5d6ff"Ta5d6ffhtml_descriptionTa5d6ff" Tff7b72in Te6edf3resultTff7b72.Td2a8ffstripped
Tff7b72def Td2a8fftest_oracle_geojson_strips_data_html_and_vbscript_icon_keysTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3payload Tff7b72= Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffFeatureCollectionTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fffeaturesTa5d6ff"Tb4b4b4: Tb4b4b4[
Tb4b4b4{
Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffFeatureTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffpropertiesTa5d6ff"Tb4b4b4: Tb4b4b4{
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffATa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffhrefTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffvbscript:msgbox(1)Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fficonTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffdata:text/html,<script>alert(1)</script>Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffnoteTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffkeep meTa5d6ff"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Ta5d6ff"Ta5d6ffgeometryTa5d6ff"Tb4b4b4: Tb4b4b4{Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffPointTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffcoordinatesTa5d6ff"Tb4b4b4: Tb4b4b4[T79c0ff1.0Tb4b4b4, T79c0ff2.0Tb4b4b4]Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Tb4b4b4)
Te6edf3result Tff7b72= Te6edf3sanitize_geo_bytesTb4b4b4(Te6edf3payloadTb4b4b4)
Te6edf3obj Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3resultTff7b72.Td2a8ffdataTb4b4b4)
Te6edf3props Tff7b72= Te6edf3objTb4b4b4[Ta5d6ff"Ta5d6fffeaturesTa5d6ff"Tb4b4b4]Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4[Ta5d6ff"Ta5d6ffpropertiesTa5d6ff"Tb4b4b4]
Tff7b72assert Ta5d6ff"Ta5d6ffhrefTa5d6ff" Tff7b72not Tff7b72in Te6edf3props
Tff7b72assert Ta5d6ff"Ta5d6fficonTa5d6ff" Tff7b72not Tff7b72in Te6edf3props
Tff7b72assert Te6edf3propsTb4b4b4[Ta5d6ff"Ta5d6ffnoteTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffkeep meTa5d6ff"
Tff7b72assert Ta5d6ff"Ta5d6ffremote_hrefTa5d6ff" Tff7b72in Te6edf3resultTff7b72.Td2a8ffstripped
Tff7b72def Td2a8fftest_oracle_image_magic_rejects_html_svg_and_emptyTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3detect_image_format_from_magicTb4b4b4(Ta5d6ffbTa5d6ff"Ta5d6ff<html><script>alert(1)</script>Ta5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3detect_image_format_from_magicTb4b4b4(Ta5d6ffbTa5d6ff"Ta5d6ff<svg onload=alert(1)>Ta5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3detect_image_format_from_magicTb4b4b4(Ta5d6ffbTa5d6ff"Ta5d6ffGIFTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3detect_image_format_from_magicTb4b4b4(Ta5d6ffbTa5d6ff"Ta5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Te6edf3png Tff7b72= Tb4b4b4(
Ta5d6ffbTa5d6ff"Tffea00\x89Ta5d6ffPNGTffea00\rTffea00\nTffea00\x1aTffea00\nTffea00\x00Tffea00\x00Tffea00\x00Tffea00\rTa5d6ffIHDRTffea00\x00Tffea00\x00Tffea00\x00Tffea00\x01Tffea00\x00Tffea00\x00Tffea00\x00Tffea00\x01Ta5d6ff"
Ta5d6ffbTa5d6ff"Tffea00\x08Tffea00\x02Tffea00\x00Tffea00\x00Tffea00\x00Tffea00\x90Ta5d6ffwSTffea00\xdeTa5d6ff"
Tb4b4b4)
Tff7b72assert Te6edf3detect_image_format_from_magicTb4b4b4(Te6edf3pngTb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffpngTa5d6ff"
Tff7b72def Td2a8fftest_oracle_executable_page_env_cannot_clobber_path_or_inject_loaderTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3env Tff7b72= Te6edf3_build_executable_page_envTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffPATHTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff/evil/binTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffSYSTEMROOTTa5d6ff"Tb4b4b4: Ta5d6ffrTa5d6ff"Ta5d6ffC:Ta5d6ff\Ta5d6ffevilTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffLD_PRELOADTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff/evil.soTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffPYTHONPATHTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff/evil/pyTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fffield_nameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffvar_xTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff1Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fffield_PATHTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff/from-peerTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fffield_LD_PRELOADTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff/from-peer.soTa5d6ff"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3link_idTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3remote_identityTff7b72=Tff7b72NoneTb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3envTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffPATHTa5d6ff"Tb4b4b4) Tff7b72== Te6edf3osTff7b72.Td2a8ffenvironTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffPATHTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3envTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffSYSTEMROOTTa5d6ff"Tb4b4b4) Tff7b72== Te6edf3osTff7b72.Td2a8ffenvironTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffSYSTEMROOTTa5d6ff"Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffSYSTEMROOTTa5d6ff" Tff7b72not Tff7b72in Te6edf3osTff7b72.Td2a8ffenvironTb4b4b4:
Tff7b72assert Ta5d6ff"Ta5d6ffSYSTEMROOTTa5d6ff" Tff7b72not Tff7b72in Te6edf3env
Tff7b72assert Ta5d6ff"Ta5d6ffLD_PRELOADTa5d6ff" Tff7b72not Tff7b72in Te6edf3env
Tff7b72assert Ta5d6ff"Ta5d6ffPYTHONPATHTa5d6ff" Tff7b72not Tff7b72in Te6edf3env
Tff7b72assert Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6fffield_nameTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffokTa5d6ff"
Tff7b72assert Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6ffvar_xTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff1Ta5d6ff"
Tff7b72assert Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6fffield_PATHTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff/from-peerTa5d6ff"
Tff7b72assert Te6edf3envTb4b4b4[Ta5d6ff"Ta5d6fffield_LD_PRELOADTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ff/from-peer.soTa5d6ff"
Tff7b72def Td2a8fftest_oracle_plugin_asset_path_rejects_traversalTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3bad Tff7b72in Tb4b4b4(
Ta5d6ff"Ta5d6ff../etc/passwdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/etc/passwdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fffoo/../../etc/passwdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffC:/Windows/system.iniTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fffooTffea00\x00Ta5d6ff/barTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff.Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff..Ta5d6ff"Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Te6edf3PluginSecurityErrorTb4b4b4)Tb4b4b4:
Te6edf3normalize_asset_pathTb4b4b4(Te6edf3badTb4b4b4)
Tff7b72assert Te6edf3normalize_asset_pathTb4b4b4(Ta5d6ff"Ta5d6fffrontend/main.jsTa5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6fffrontend/main.jsTa5d6ff"
Tff7b72def Td2a8fftest_oracle_ws_handlers_are_classifiedTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3classified Tff7b72= Te6edf3WEBSOCKET_PUBLIC_TYPES Tff7b72| Te6edf3WEBSOCKET_READ_TYPES Tff7b72| Te6edf3WEBSOCKET_MUTATOR_TYPES
Te6edf3missing Tff7b72= Tffa657setTb4b4b4(Te6edf3WS_HANDLERSTb4b4b4) Tff7b72- Te6edf3classified
Te6edf3extra Tff7b72= Te6edf3classified Tff7b72- Tffa657setTb4b4b4(Te6edf3WS_HANDLERSTb4b4b4)
Tff7b72assert Tff7b72not Te6edf3missingTb4b4b4, Ta5d6fffTa5d6ff"Ta5d6ffunclassified WS handlers: Tffd700{Tffa657sortedTb4b4b4(Te6edf3missingTb4b4b4)Tffd700}Ta5d6ff"
Tff7b72assert Tff7b72not Te6edf3extraTb4b4b4, Ta5d6fffTa5d6ff"Ta5d6ffguard lists types with no handler: Tffd700{Tffa657sortedTb4b4b4(Te6edf3extraTb4b4b4)Tffd700}Ta5d6ff"
Tff7b72for Te6edf3msg_type Tff7b72in Te6edf3WEBSOCKET_MUTATOR_TYPESTb4b4b4:
Tff7b72assert Te6edf3websocket_type_requires_authTb4b4b4(Te6edf3msg_typeTb4b4b4) Tff7b72is Tff7b72True
Tff7b72for Te6edf3msg_type Tff7b72in Te6edf3WEBSOCKET_PUBLIC_TYPESTb4b4b4:
Tff7b72assert Te6edf3websocket_type_requires_authTb4b4b4(Te6edf3msg_typeTb4b4b4) Tff7b72is Tff7b72False
Tff7b72for Te6edf3msg_type Tff7b72in Te6edf3WEBSOCKET_READ_TYPESTb4b4b4:
Tff7b72assert Te6edf3websocket_type_requires_authTb4b4b4(Te6edf3msg_typeTb4b4b4) Tff7b72is Tff7b72True
Tff7b72def Td2a8fftest_oracle_config_dict_omits_secretsTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3mock_appTff7b72.Td2a8ffconfigTff7b72.Td2a8ffauth_password_hashTff7b72.Td2a8ffsetTb4b4b4(Ta5d6ff"Ta5d6ffshould-never-leakTa5d6ff"Tb4b4b4)
Te6edf3mock_appTff7b72.Td2a8ffidentityTff7b72.Td2a8ffget_public_key Tff7b72= Te6edf3MagicMockTb4b4b4(Te6edf3return_valueTff7b72=Ta5d6ffbTa5d6ff"Tffea00\x01Ta5d6ff" Tff7b72* T79c0ff64Tb4b4b4)
Te6edf3cfg Tff7b72= Te6edf3mock_appTff7b72.Td2a8ffget_config_dictTb4b4b4(Tb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffauth_password_hashTa5d6ff" Tff7b72not Tff7b72in Te6edf3cfg
Tff7b72assert Ta5d6ff"Ta5d6ffprivate_keyTa5d6ff" Tff7b72not Tff7b72in Te6edf3cfg
Tff7b72def Td2a8ffwalkTb4b4b4(Te6edf3objTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3objTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72assert Ta5d6ff"Ta5d6ffauth_password_hashTa5d6ff" Tff7b72not Tff7b72in Te6edf3obj
Tff7b72assert Ta5d6ff"Ta5d6ffprivate_keyTa5d6ff" Tff7b72not Tff7b72in Te6edf3obj
Tff7b72for Te6edf3value Tff7b72in Te6edf3objTff7b72.Td2a8ffvaluesTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3walkTb4b4b4(Te6edf3valueTb4b4b4)
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3objTb4b4b4, Tffa657strTb4b4b4)Tb4b4b4:
Tff7b72assert Ta5d6ff"Ta5d6ffshould-never-leakTa5d6ff" Tff7b72not Tff7b72in Te6edf3obj
Tff7b72assert Ta5d6ff"Ta5d6fftest_private_keyTa5d6ff" Tff7b72not Tff7b72in Te6edf3obj
Te6edf3walkTb4b4b4(Te6edf3cfgTb4b4b4)
Tff7b72def Td2a8fftest_oracle_startup_status_omits_identity_materialTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3payload Tff7b72= Te6edf3mock_appTff7b72.Td2a8ff_startup_status_payloadTb4b4b4(Tb4b4b4)
Te6edf3blob Tff7b72= Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4(Te6edf3payloadTb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffidentity_hashTa5d6ff" Tff7b72not Tff7b72in Te6edf3payload
Tff7b72assert Ta5d6ff"Ta5d6ffidentity_public_keyTa5d6ff" Tff7b72not Tff7b72in Te6edf3payload
Tff7b72assert Ta5d6ff"Ta5d6ffauth_password_hashTa5d6ff" Tff7b72not Tff7b72in Te6edf3blob
Tff7b72assert Ta5d6ff"Ta5d6ffprivate_keyTa5d6ff" Tff7b72not Tff7b72in Te6edf3blob
Tff7b72def Td2a8fftest_oracle_csrf_exempt_is_exact_path_onlyTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3csrf_exempt_pathTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/auth/csrfTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Te6edf3csrf_exempt_pathTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/auth/csrf/Ta5d6ff"Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72assert Te6edf3csrf_exempt_pathTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/auth/csrf/extraTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72assert Te6edf3csrf_exempt_pathTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/auth/loginTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72assert Te6edf3csrf_exempt_pathTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/map/data/publishTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72def Td2a8fftest_oracle_parse_stored_lxmf_fields_fail_closedTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3parse_stored_lxmf_fieldsTb4b4b4(Ta5d6ff'Ta5d6ff{Ta5d6ff"Ta5d6ffokTa5d6ff"Ta5d6ff: true}Ta5d6ff'Tb4b4b4) Tff7b72== Tb4b4b4{Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4: Tff7b72TrueTb4b4b4}
Tff7b72for Te6edf3bad Tff7b72in Tb4b4b4(Tff7b72NoneTb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff[]Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnullTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff1Ta5d6ff"Tb4b4b4, Ta5d6ffbTa5d6ff"Ta5d6ffnot-jsonTa5d6ff"Tb4b4b4, Tffa657objectTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3parse_stored_lxmf_fieldsTb4b4b4(Te6edf3badTb4b4b4) Tff7b72is Tff7b72None
Tff7b72def Td2a8fftest_oracle_redact_diagnostic_strips_keys_paths_hashesTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3raw Tff7b72= Tb4b4b4(
Ta5d6ff"Ta5d6ffpassword=supersecret Ta5d6ff"
Ta5d6ff"Ta5d6ffprivate_key=aabb Ta5d6ff"
Ta5d6ff"Ta5d6ffalias_identity_private_key=deadbeef Ta5d6ff"
Ta5d6ff"Ta5d6ff/home/user1/meshchatx/database.db Ta5d6ff"
Ta5d6ff"Ta5d6ffhash=Ta5d6ff" Tff7b72+ Tb4b4b4(Ta5d6ff"Ta5d6ffabTa5d6ff" Tff7b72* T79c0ff32Tb4b4b4)
Tb4b4b4)
Te6edf3out Tff7b72= Te6edf3redact_diagnostic_textTb4b4b4(Te6edf3rawTb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffsupersecretTa5d6ff" Tff7b72not Tff7b72in Te6edf3out
Tff7b72assert Ta5d6ff"Ta5d6ffdeadbeefTa5d6ff" Tff7b72not Tff7b72in Te6edf3out
Tff7b72assert Ta5d6ff"Ta5d6ff/home/user1Ta5d6ff" Tff7b72not Tff7b72in Te6edf3out
Tff7b72assert Tb4b4b4(Ta5d6ff"Ta5d6ffabTa5d6ff" Tff7b72* T79c0ff32Tb4b4b4) Tff7b72not Tff7b72in Te6edf3out
Tff7b72assert Te6edf3REDACTED Tff7b72in Te6edf3out
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tff7b72async Tff7b72def Td2a8fftest_oracle_auth_middleware_status_prefix_is_not_publicTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3app Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3appTff7b72.Td2a8ffauth_enabled Tff7b72= Tff7b72True
Te6edf3appTff7b72.Td2a8ffcurrent_context Tff7b72= Te6edf3MagicMockTb4b4b4(Te6edf3runningTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3appTff7b72.Td2a8ffidentityTff7b72.Td2a8ffhashTff7b72.Td2a8ffhexTff7b72.Td2a8ffreturn_value Tff7b72= Ta5d6ff"Ta5d6ffaaTa5d6ff" Tff7b72* T79c0ff16
Te6edf3appTff7b72.Td2a8ff_startup_stage Tff7b72= Ta5d6ff"Ta5d6ffokTa5d6ff"
Te6edf3handler Tff7b72= Te6edf3AsyncMockTb4b4b4(Te6edf3return_valueTff7b72=Te6edf3webTff7b72.Td2a8ffResponseTb4b4b4(Te6edf3statusTff7b72=T79c0ff200Tb4b4b4, Te6edf3textTff7b72=Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3mw Tff7b72= Te6edf3create_auth_middlewareTb4b4b4(Te6edf3appTb4b4b4)
Te6edf3empty_session Tff7b72= Te6edf3AsyncMockTb4b4b4(Te6edf3return_valueTff7b72=Tb4b4b4{Tb4b4b4}Tb4b4b4)
Tff7b72async Tff7b72def Td2a8ffcallTb4b4b4(Te6edf3pathTb4b4b4)Tb4b4b4:
Te6edf3request Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3requestTff7b72.Td2a8ffpath Tff7b72= Te6edf3path
Tff7b72with Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.http.middleware.get_sessionTa5d6ff"Tb4b4b4,
Te6edf3empty_sessionTb4b4b4,
Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72await Te6edf3mwTb4b4b4(Te6edf3requestTb4b4b4, Te6edf3handlerTb4b4b4)
Te6edf3public Tff7b72= Tff7b72await Te6edf3callTb4b4b4(Ta5d6ff"Ta5d6ff/api/v1/statusTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3publicTff7b72.Td2a8ffstatus Tff7b72== T79c0ff200
Te6edf3handlerTff7b72.Td2a8ffassert_awaitedTb4b4b4(Tb4b4b4)
Te6edf3handlerTff7b72.Td2a8ffreset_mockTb4b4b4(Tb4b4b4)
Tff7b72for Te6edf3path Tff7b72in Tb4b4b4(
Ta5d6ff"Ta5d6ff/api/v1/status.jsonTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/api/v1/status/extraTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/api/v1/configTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/api/v1/map/data/statusTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff/wsTa5d6ff"Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Te6edf3handlerTff7b72.Td2a8ffreset_mockTb4b4b4(Tb4b4b4)
Te6edf3resp Tff7b72= Tff7b72await Te6edf3callTb4b4b4(Te6edf3pathTb4b4b4)
Tff7b72assert Te6edf3respTff7b72.Td2a8ffstatus Tff7b72== T79c0ff401Tb4b4b4, Ta5d6fffTa5d6ff"Tffd700{Te6edf3pathTffd700}Ta5d6ff expected 401 got Tffd700{Te6edf3respTff7b72.Td2a8ffstatusTffd700}Ta5d6ff"
Te6edf3handlerTff7b72.Td2a8ffassert_not_awaitedTb4b4b4(Tb4b4b4)
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffusefixturesTb4b4b4(Ta5d6ff"Ta5d6ffrequire_loopback_tcpTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8fftest_oracle_protected_routes_401_when_auth_enabledTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3_enable_password_authTb4b4b4(Te6edf3mock_appTb4b4b4)
Te6edf3aio_app Tff7b72= Te6edf3_make_aio_appTb4b4b4(Te6edf3mock_appTb4b4b4)
Tff7b72async Tff7b72with Te6edf3TestClientTb4b4b4(Te6edf3TestServerTb4b4b4(Te6edf3aio_appTb4b4b4)Tb4b4b4) Tff7b72as Te6edf3clientTb4b4b4:
Tff7b72for Te6edf3spec Tff7b72in Te6edf3_PROTECTED_WHEN_AUTHTb4b4b4:
Te6edf3methodTb4b4b4, Te6edf3path Tff7b72= Te6edf3specTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4)
Tff7b72if Te6edf3method Tff7b72== Ta5d6ff"Ta5d6ffGETTa5d6ff"Tb4b4b4:
Te6edf3resp Tff7b72= Tff7b72await Te6edf3clientTff7b72.Td2a8ffgetTb4b4b4(Te6edf3pathTb4b4b4)
Tff7b72elif Te6edf3method Tff7b72== Ta5d6ff"Ta5d6ffPOSTTa5d6ff"Tb4b4b4:
Te6edf3resp Tff7b72= Tff7b72await Te6edf3clientTff7b72.Td2a8ffpostTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3jsonTff7b72=Tb4b4b4{Tb4b4b4}Tb4b4b4)
Tff7b72elif Te6edf3method Tff7b72== Ta5d6ff"Ta5d6ffPATCHTa5d6ff"Tb4b4b4:
Te6edf3resp Tff7b72= Tff7b72await Te6edf3clientTff7b72.Td2a8ffpatchTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3jsonTff7b72=Tb4b4b4{Tb4b4b4}Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3resp Tff7b72= Tff7b72await Te6edf3clientTff7b72.Td2a8ffdeleteTb4b4b4(Te6edf3pathTb4b4b4)
Tff7b72assert Te6edf3respTff7b72.Td2a8ffstatus Tff7b72in Tb4b4b4(T79c0ff401Tb4b4b4, T79c0ff403Tb4b4b4)Tb4b4b4, Tb4b4b4(
Ta5d6fffTa5d6ff"Tffd700{Te6edf3specTffd700}Ta5d6ff expected 401/403 got Tffd700{Te6edf3respTff7b72.Td2a8ffstatusTffd700}Ta5d6ff"
Tb4b4b4)
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffasyncio
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffusefixturesTb4b4b4(Ta5d6ff"Ta5d6ffrequire_loopback_tcpTa5d6ff"Tb4b4b4)
Tff7b72async Tff7b72def Td2a8fftest_oracle_auth_setup_rejected_once_password_existsTb4b4b4(Te6edf3mock_appTb4b4b4)Tb4b4b4:
Te6edf3_enable_password_authTb4b4b4(Te6edf3mock_appTb4b4b4)
Te6edf3aio_app Tff7b72= Te6edf3_make_aio_appTb4b4b4(Te6edf3mock_appTb4b4b4)
Tff7b72async Tff7b72with Te6edf3TestClientTb4b4b4(Te6edf3TestServerTb4b4b4(Te6edf3aio_appTb4b4b4)Tb4b4b4) Tff7b72as Te6edf3clientTb4b4b4:
Te6edf3headers Tff7b72= Tff7b72await Te6edf3fetch_api_csrf_headersTb4b4b4(Te6edf3clientTb4b4b4)
Te6edf3resp Tff7b72= Tff7b72await Te6edf3clientTff7b72.Td2a8ffpostTb4b4b4(
Ta5d6ff"Ta5d6ff/api/v1/auth/setupTa5d6ff"Tb4b4b4,
Te6edf3jsonTff7b72=Tb4b4b4{Ta5d6ff"Ta5d6ffpasswordTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffnew-password-okTa5d6ff"Tb4b4b4}Tb4b4b4,
Te6edf3headersTff7b72=Te6edf3headersTb4b4b4,
Tb4b4b4)
Tff7b72assert Te6edf3respTff7b72.Td2a8ffstatus Tff7b72== T79c0ff403
Te6edf3body Tff7b72= Tff7b72await Te6edf3respTff7b72.Td2a8ffjsonTb4b4b4(Tb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffalreadyTa5d6ff" Tff7b72in Te6edf3bodyTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fferrorTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3max_examplesTff7b72=T79c0ff40Tb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fftoo_slowTb4b4b4]Tb4b4b4,
Tb4b4b4)
Tf0883e@givenTb4b4b4(Te6edf3rawTff7b72=Te6edf3stTff7b72.Td2a8fftextTb4b4b4(Te6edf3max_sizeTff7b72=T79c0ff200Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_oracle_safe_href_never_returns_executable_schemeTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4:
Te6edf3out Tff7b72= Te6edf3_safe_hrefTb4b4b4(Te6edf3rawTb4b4b4)
Tff7b72assert Tffa657isinstanceTb4b4b4(Te6edf3outTb4b4b4, Tffa657strTb4b4b4)
Tff7b72assert Tff7b72not Te6edf3_href_is_executableTb4b4b4(Te6edf3outTb4b4b4) Tff7b72or Te6edf3out Tff7b72== Ta5d6ff"Ta5d6ff#Ta5d6ff"
Tff7b72if Te6edf3_href_is_executableTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3out Tff7b72== Ta5d6ff"Ta5d6ff#Ta5d6ff"
Served by rngit 1.4.2 - Generated in 0.03s